通过SkyWalkingGoSDK上报Go应用数据 您所在的位置:网站首页 阿里sdk invoke 通过SkyWalkingGoSDK上报Go应用数据

通过SkyWalkingGoSDK上报Go应用数据

2024-02-26 14:48| 来源: 网络整理| 查看: 265

跨进程调用时,为什么通过Go2Sky上报可观测链路 OpenTelemetry 版控制台无法显示正确的调用链?

全链路追踪通过TraceId将整个链路串联起来,而TraceId通过HTTP请求携带传递。如果调用链不正确,说明TraceId没有正确传递,需要设置合理的Span埋点。

通过合理使用下面两个重要的接口,可以将跨进程的调用链正确的串联起来:

CreateEntrySpan:入口Span,可以通过该接口从HTTP请求中提取得到链路追踪上下文(包含TraceId)。

CreateExitSpan:出口Span,可以通过该接口向HTTP请求注入链路追踪上下文(包含TraceId)。

// 进程内,使用CreateLocalSpan创建一个跨度(Span)。 span, ctx, err := tracer.CreateLocalSpan(context.Background()) subSpan, newCtx, err := tracer.CreateLocalSpan(ctx) // 跨进程,使用入口Span从CreateEntrySpan从Http请求中提取上下文,使用出口Span向CreateExitSpan向Http请求中注入上下文。 span, ctx, err := tracer.CreateEntrySpan(r.Context(), "/api/login", func(key string) (string, error) { return r.Header.Get(key), nil }) span, err := tracer.CreateExitSpan(req.Context(), "/service/validate", "tomcat-service:8080", func(key, value string) error { req.Header.Set(key, value) return nil })

跨进程的项目,不同进程之间需要传递TraceId才能将调用链串联起来,所以需要用到上面的接口将上下文注入到HTTP请求中随着请求在进程间传递。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有